package com.kotlin.flong.base

/**
 *by lazy  惰性加载->用到的时候在加载的意思
 *lateinit 延迟加载
 *1、by lazy 和 lateinit 都可以单独使用或者放在成员变量中使用
 *2、by lazy 知道具体值，用到的时候再加载
 *3、lateinit 不知道具体值，后面赋值再使用
 *4、by lazy 必须是val修饰，lateinit必须var修饰
 */
fun main(args: Array<String>) {
    //println(name1)
    //println(name1)

    val p = Person1()
    p.setUserName("梁寅务")
    println(p.useName)

}

//by lazy 值必须是val,表示不可变的值 ，可以放在成员变量中,可以单独存在，返就是最后一行
//并且by lazy是线程安全的（同步）
val name1: String by lazy {
    println(" init by lazy") //验证是否调用多次
    "寅务"
}

class Person1() {

    //这种使用表示使用Person1这个类的时候就已经加载了name
    //val name = "张三"
    //使用的时候再加载
    val name by lazy { "张三" }

    //lateinit表示不确定，后面可能用到的时候才会赋值,不知道具体是什么值
    lateinit var useName: String

    fun setUserName(useName: String) {
        this.useName = useName

    }

}






